package com.wl4837;

public abstract class Beverage {

    // 模板方法（final防止子类覆盖）
    public final void prepareBeverage() {
        boilWater();
        brew();
        pourInCup();
        if (customerWantsCondiments()) {
            addCondiments();
        }
    }

    // 基本方法 - 具体方法（已实现）
    private void boilWater() {
        System.out.println("煮沸水");
    }

    private void pourInCup() {
        System.out.println("倒入杯子");
    }

    // 基本方法 - 抽象方法（由子类实现）
    protected abstract void brew();

    protected abstract void addCondiments();

    // 钩子方法（可选步骤，子类可覆盖）
    protected boolean customerWantsCondiments() {
        return true;
    }
}